<?php

namespace App\Contracts;

use App\Models\BaseModel;

/**
 * 数据仓库接口
 *
 * Interface IRepository
 *
 * @package App\Contracts
 */
interface IRepository
{
    /**
     * 写入数据
     *
     * @param array $attributes
     *
     * @return mixed
     */
    public function store(array $attributes);

    /**
     * 删除数据-单条
     *
     * @param BaseModel $model
     *
     * @return mixed
     */
    public function delete(BaseModel $model);

    /**
     * 更新数据-多个字段
     *
     * @param BaseModel $model
     * @param $attributes
     *
     * @return mixed
     */
    public function put(BaseModel $model, $attributes);

    /**
     * 读取数据-存在性
     *
     * @param int $id
     *
     * @return mixed
     */
    public function has(int $id);

    /**
     * 读取数据-单条
     *
     * @param int $id
     * @param null $fields
     *
     * @return mixed
     */
    public function getOne(int $id, $fields = null);

    /**
     * 读取数据-多条
     *
     * @param array $map
     * @param null $fields
     *
     * @return mixed
     */
    public function getMany(array $map, $fields = null);

    /**
     * 读取数据-列
     *
     * @param null $field
     *
     * @return mixed
     */
    public function getColumn($field = null);
}
